package com.jinmdz.fmis.api.api.controller;

import com.jinmdz.fmis.api.admin.service.AdminService;
import com.jinmdz.fmis.api.api.model.user.AdminSystemViewItem;
import com.jinmdz.fmis.api.api.model.user.LoginData;
import com.jinmdz.fmis.api.api.service.UserService;
import com.jinmdz.fmis.api.base.BaseController;
import com.jinmdz.fmis.api.wrapper.SecurityWrapper;
import com.jinmdz.fmis.core.base.BaseResult;
import com.jinmdz.fmis.dao.model.user.RoleUserViewItem;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;

/**
 * 用户管理相关接口
 *
 * @author LiCongLu
 * @date 2019-12-23 08:54
 */
@Api(description = "用户管理相关接口")
@RestController()
@RequestMapping("/api/user")
public class UserController extends BaseController {

    @Resource
    private SecurityWrapper securityWrapper;

    @Resource
    private UserService userService;

    @Resource
    private AdminService adminService;

    /**
     * 登录界面加载业务系统列表数据
     *
     * @param
     * @return
     * @author LiCongLu
     * @date 2020-03-24 15:13
     */
    @ApiOperation(value = "登录界面加载业务系统列表数据，业务系统表【business_system】", notes = "登录界面加载业务系统列表数据，业务系统表【business_system】")
    @PostMapping("/load-system-list")
    public BaseResult<ArrayList<AdminSystemViewItem>> loadSystemList() {
        return adminService.loadSystemList();
    }

    /**
     * 用户登录
     *
     * @param data 登录账号数据
     * @return
     * @author LiCongLu
     * @date 2019-12-24 14:30
     */
    @ApiOperation(value = "用户登录", notes = "用户登录接口，提供账户和密码进行登录验证。测试用账号：admin，密码：0000")
    @PostMapping("/login")
    public BaseResult login(@RequestBody LoginData data) {
        return securityWrapper.login(data);
    }

    /**
     * 用户登录注销
     *
     * @param
     * @return
     * @author LiCongLu
     * @date 2019-12-24 14:30
     */
    @ApiOperation(value = "用户登录注销", notes = "用户退出系统接口，提供用户身份令牌Token，通过接口注销用户登录状态")
    @PostMapping("/logout")
    public BaseResult logout() {
        return resultHandler(userItem -> securityWrapper.logout(getToken(), userItem.getId()));
    }

    /**
     * 根据用户组编码加载用户组信息
     *
     * @param data 用户组编码数据
     * @return
     * @author LiCongLu
     * @date 2020-01-15 11:54
     */
    @ApiOperation(value = "根据用户组编码加载用户组信息", notes = "根据用户组编码加载用户组信息，实现时，用户组可通过角色功能实现，编码定义如下：洽谈员[negotiator_user]，接运司机[transport_task_driver_user],抬尸工[transport_task_porter]")
    @PostMapping("/load-user-with-type-code")
    public BaseResult<HashMap<String, ArrayList<RoleUserViewItem>>> loadUserWithTypeCode(@RequestBody ArrayList<String> data) {
        return resultHandler(userItem -> userService.loadUserWithTypeCode(data));
    }
}
